package cn.saas.stepview;

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Paint;
import android.text.InputFilter;
import android.text.InputType;
import android.util.AttributeSet;
import android.view.View;
import android.widget.EditText;
import android.widget.LinearLayout;

import androidx.constraintlayout.widget.ConstraintLayout;

/**
 * @Title :
 * @date : 2021/8/5 17:24
 */
public class LineEditText extends ConstraintLayout {

    private static final int TYPE_DEFAUT = 3;
    private Paint paint;
    private EditText et_text;
    int maxLength;
    int inputType;

    //布局中使用，只需要重写带两个、三个参数的构造函数即可，最终是调用三个参数的构造
    public LineEditText(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public LineEditText(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        initAttrs(context, attrs);
        initViews(context, attrs);
    }

    private void initAttrs(Context context, AttributeSet attrs) {
        //获取并设置属性值
        TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.LineEditText);
        //输入最大字符属性
        maxLength = array.getInt(R.styleable.LineEditText_textMaxLength, -1);
        //输入类型属性
        inputType = array.getInt(R.styleable.LineEditText_textInputType, TYPE_DEFAUT);
        //注意要回收
        array.recycle();
    }

    private void initViews(Context context, AttributeSet attrs) {
        //将布局与创建的类关联起来，注意第三个参数是this，而不是null，因为是要填充到当前容器中
        View view = View.inflate(context, R.layout.view_lineedittext, this);
        et_text = (EditText) view.findViewById(R.id.et_text);

        //设置最大字符属性,这个可以去看下TextView的源码就知道为什么这么写了
        if (maxLength >= 0) {
            et_text.setFilters(new InputFilter[]{new InputFilter.LengthFilter(maxLength)});
        } else {
            et_text.setFilters(new InputFilter[0]);
        }

        //设置输入类型控制
        switch (inputType) {
            case TYPE_DEFAUT:
                et_text.setInputType(InputType.TYPE_TEXT_FLAG_MULTI_LINE);  //多行文本
                //要使多行文本属性生效要加上下面两句才行
                et_text.setSingleLine(false);
                et_text.setHorizontallyScrolling(false);
                break;
            case 0:
                et_text.setInputType(InputType.TYPE_CLASS_PHONE);       //电话号码
                break;
            case 1:
                et_text.setInputType(InputType.TYPE_CLASS_NUMBER);      //数字
                break;
            case 2:
                et_text.setInputType(InputType.TYPE_TEXT_FLAG_MULTI_LINE);
                et_text.setSingleLine(false);
                et_text.setHorizontallyScrolling(false);
                break;
            default:
                et_text.setInputType(InputType.TYPE_TEXT_FLAG_MULTI_LINE);
                et_text.setSingleLine(false);
                et_text.setHorizontallyScrolling(false);
                break;
        }

    }
}